package com.yl.util;

import cn.hutool.core.collection.ListUtil;
import com.yl.constant.Const;
import org.apache.flink.table.planner.expressions.In;

import java.util.List;

/**
 * @author wlf
 * @since 2022/8/10
 */
public class SUtil {

    /**
     * 格式化mqtt topic
     */
    public static String fmtMqttTopic(Object... args) {
        return fmt(Const.PTN_SLASH, ListUtil.toList(args));
    }

    /**
     * 格式化redis key
     */
    public static String fmtRedisKey(Object... args) {
        return fmt(Const.PTN_COLON, ListUtil.toList(args));
    }

    /**
     * 把传入的值用底杠连接，返回连接后的字符串
     */
    public static String fmt(Object... args) {
        return fmt(Const.PTN_BAR_BOTTOM, ListUtil.toList(args));
    }

    /**
     * 获取拼接字符串中指定分隔符切分位置的字符
     */
    public static String deFmt(String fmtStr, int index, String delimiter) {
        return fmtStr.split(delimiter)[index];
    }

    /**
     * 获取拼接字符串中指定分隔符切分位置的字符
     */
    public static String deFmt(String fmtStr, int index) {
        return fmtStr.split(Const.PTN_BAR_BOTTOM)[index];
    }

    /**
     * 把传入的值用底杠连接，返回连接后的字符串
     */
    private static String fmt(String delimiter, List<Object> args) {
        StringBuilder sb = new StringBuilder();
        for (Object arg : args) {
            sb.append(arg).append(delimiter);
        }
        sb.deleteCharAt(sb.lastIndexOf(delimiter));
        return sb.toString();
    }

    /**
     * 从MySQL url 中获取host
     * jdbc:mysql://elephant:3306/db_common
     */
    static String getHost(String mysqlUrl) {
        return mysqlUrl.split("://")[1].split(":")[0];
    }

    /**
     * 从MySQL url 中获取数据库
     */
    static String getDB(String mysqlUrl) {
        return mysqlUrl.split("3306/")[1];
    }

    /**
     * t1,t2 -> db.t1,db.t2
     */
    static String fmtTables(String db, String tables) {
        StringBuilder sb = new StringBuilder();
        for (String table : tables.split(Const.PTN_COMMA)) {
            sb.append(db).append(Const.PTN_PERIOD).append(table).append(Const.PTN_COMMA);
        }
        sb.deleteCharAt(sb.lastIndexOf(Const.PTN_COMMA));
        return sb.toString();
    }

}
